home *** CD-ROM | disk | FTP | other *** search
/ ETO Development Tools 4 / ETO Development Tools 4.iso / Tools - Objects / MacApp / MacApp 3.0a2 / Libraries / UBehavior.cp < prev    next >
Encoding:
Text File  |  1991-05-01  |  7.5 KB  |  311 lines  |  [TEXT/MPS ]

  1. ////////////////////////////////////////////////////////////////////////////
  2. //    UBehavior.cp
  3. //
  4. // Contains:        Implementation for Behavior abstract class
  5. //
  6. // Copyright 1984-1991 Apple Computer, Inc.All rights reserved.
  7. //
  8. //    Change History:
  9. //
  10. //            2/22/91        rtm        Initial creation of file
  11. //
  12. ////////////////////////////////////////////////////////////////////////////
  13.  
  14. #ifndef __UMACAPPUTILITIES__
  15.     #include <UMacAppUtilities.h>
  16. #endif
  17. #ifndef __UERRORMGR__
  18.     #include <UErrorMgr.h>
  19. #endif
  20. #ifndef __UMACAPPGLOBALS__
  21.     #include <UMacAppGlobals.h>
  22. #endif
  23. #ifndef __UOBJECT__
  24.     #include <UObject.h>
  25. #endif
  26. #ifndef __UVIEW__
  27.     #include <UView.h>
  28. #endif
  29. #ifndef __UBEHAVIOR__
  30.     #include <UBehavior.h>
  31. #endif
  32.  
  33.  
  34. //    •••••••••••••••••••••••••••••••••••••••••••••••••
  35. //    •    TBehavior                                                •
  36. //    •••••••••••••••••••••••••••••••••••••••••••••••••
  37. //--------------------------------------------------------------------------------------
  38. #pragma    segment    MAOpen
  39.  
  40. pascal void TBehavior::Initialize ( void )    //    OVERRIDE
  41. {
  42.     inherited::Initialize();
  43.     
  44.     fOwner = NULL;
  45.     fPreviousBehavior = NULL;
  46.     fNextBehavior = NULL;
  47.     
  48. }    // <- Initialize
  49.  
  50. //--------------------------------------------------------------------------------------
  51. #pragma    segment    MAOpen
  52.  
  53. pascal void TBehavior::IBehavior ( void )
  54. {
  55.     
  56.     this->IObject ( );
  57.  
  58. }    // <- IBehavior
  59.  
  60. //--------------------------------------------------------------------------------------
  61. #pragma segment MABehaviorRes
  62.  
  63. pascal TObject* TBehavior::Clone ( void )        // OVERRIDE 
  64.  
  65. {
  66.     TBehavior* aClonedBehavior;
  67.  
  68.  
  69.     aClonedBehavior = (TBehavior *)(inherited::Clone());
  70.  
  71.  
  72.     return aClonedBehavior;
  73. }
  74.  
  75. //--------------------------------------------------------------------------------------
  76. #pragma    segment    MAClose
  77.  
  78. pascal void TBehavior::Free ( void )
  79. {
  80.     
  81.     FreeIfObject ( fNextBehavior );
  82.     
  83.     inherited::Free ();
  84.     
  85. }    // <- Free
  86.  
  87. //--------------------------------------------------------------------------------------
  88. #pragma    segment    MAOpen
  89.  
  90. pascal void TBehavior::SetNextBehavior ( TBehavior* nextBehavior )
  91. {
  92.     
  93.     if ( fNextBehavior )
  94.         fNextBehavior->SetNextBehavior ( nextBehavior );
  95.     else
  96.     {
  97.         fNextBehavior = nextBehavior;
  98.         fNextBehavior->SetPreviousBehavior ( this );
  99.     }
  100.     
  101. }    // <- SetNextBehavior
  102.  
  103. //--------------------------------------------------------------------------------------
  104. #pragma    segment    MAOpen
  105.  
  106. pascal void TBehavior::SetOwner ( TEvtHandler* itsOwner )
  107. {
  108.     fOwner = itsOwner;
  109.     
  110. }    // <- SetOwner
  111.  
  112. //--------------------------------------------------------------------------------------
  113. #pragma    segment    MAOpen
  114.  
  115. pascal void TBehavior::SetPreviousBehavior ( TBehavior* previousBehavior )
  116. {
  117.     fPreviousBehavior = previousBehavior;
  118.     
  119. }    // <- SetPreviousBehavior
  120.  
  121. //--------------------------------------------------------------------------------------
  122. #pragma    segment    MAOpen
  123.  
  124. pascal TBehavior* TBehavior::GetNextBehavior ( void )
  125. {
  126.     
  127.     return fNextBehavior;
  128.     
  129. }    // <- GetNextBehavior
  130.  
  131. //--------------------------------------------------------------------------------------
  132. #pragma    segment    MABehaviorNonRes
  133.  
  134. pascal void TBehavior::InsertBefore (     TBehavior*     insertMe,
  135.                                                     TBehavior*    before )
  136. {
  137.  
  138.     // • We are one that insertion is going to be before
  139.     if ( this == before )
  140.     {
  141.         if ( fPreviousBehavior )
  142.             fPreviousBehavior->SetNextBehavior ( insertMe );
  143.         
  144.         insertMe->SetNextBehavior ( this );
  145.     }
  146.     else    // • Pass message on down chain    
  147.     {
  148.         if ( fNextBehavior )
  149.             fNextBehavior->InsertBefore ( insertMe, before );
  150.     }
  151.     
  152. }    // <- InsertBefore
  153.  
  154. //--------------------------------------------------------------------------------------
  155. #pragma    segment    MABehaviorNonRes
  156.  
  157. pascal void TBehavior::InsertAfter (     TBehavior*     insertMe,
  158.                                                     TBehavior*    after )
  159. {
  160.     
  161.     // • We are one that insertion is going to be after
  162.     if ( this == after )
  163.     {
  164.         if ( fNextBehavior )
  165.             insertMe->SetNextBehavior ( this->GetNextBehavior () );
  166.         
  167.         this->SetNextBehavior ( insertMe );
  168.     }
  169.     else    // • Pass message on down chain
  170.     {
  171.         if ( fNextBehavior )
  172.             fNextBehavior->InsertAfter ( insertMe, after );
  173.     }
  174.     
  175. }    // <- InsertAfter
  176.  
  177. //--------------------------------------------------------------------------------------
  178. #pragma    segment    MABehaviorNonRes
  179.  
  180. pascal void TBehavior::Remove (     TBehavior*     removeMe )
  181. {
  182.     // • We are the one being removed
  183.     if ( this == removeMe )
  184.     {
  185.         if ( fPreviousBehavior )
  186.             fPreviousBehavior->SetNextBehavior ( this->GetNextBehavior () );
  187.         
  188.         this->SetNextBehavior ( NULL );            
  189.         // ••• Should the behavior Free itself or should the controller
  190.         // be responsible for making sure that it is freed
  191.     }
  192.     else    // • Pass message on down chain as we aren't one to be removed
  193.     {
  194.         if ( fNextBehavior )
  195.             fNextBehavior->Remove ( removeMe );
  196.     }
  197.     
  198. }    // <- Remove
  199.  
  200. //--------------------------------------------------------------------------------------
  201. #pragma    segment    MABehaviorRes
  202.  
  203. pascal void TBehavior::DoAppleCommand (     CmdNumber aCmdNumber,
  204.                                                         const AppleEvent& message,
  205.                                                         const AppleEvent& reply )
  206. {
  207.  
  208.     if ( fNextBehavior )
  209.         fNextBehavior->DoAppleCommand ( aCmdNumber, message, reply );
  210.     else if ( fOwner )
  211.         fOwner->DoAppleCommand ( aCmdNumber, message, reply );
  212.     
  213. }    // <- DoAppleCommand
  214.  
  215. //--------------------------------------------------------------------------------------
  216. #pragma    segment    MASelCommand
  217.  
  218. pascal void TBehavior::DoCommandKey ( TToolboxEvent* event )
  219. {
  220.     
  221.     if ( fNextBehavior )
  222.         fNextBehavior->DoCommandKey ( event );
  223.     else if ( fOwner )
  224.         fOwner->DoCommandKey ( event );
  225.     
  226. }    // <- DoCommandKey
  227.  
  228. //--------------------------------------------------------------------------------------
  229. #pragma segment MABehaviorRes
  230.  
  231. pascal void TBehavior::DoEvent (    EvtNumber eventNumber,
  232.                                             TEvtHandler* source,
  233.                                             TEvent* event )
  234. {
  235.  
  236.     if ( fNextBehavior )
  237.         fNextBehavior->DoEvent ( eventNumber, source, event );
  238.     else if ( fOwner )
  239.         fOwner->DoEvent ( eventNumber, source, event );
  240.     
  241. }    // <- DoEvent
  242.  
  243. //--------------------------------------------------------------------------------------
  244. #pragma    segment    MASelCommand
  245.  
  246. pascal void TBehavior::DoKeyCommand ( TToolboxEvent* event )
  247. {
  248.     
  249.     if ( fNextBehavior )
  250.         fNextBehavior->DoKeyCommand ( event );
  251.     else if ( fOwner != NULL )
  252.         fOwner->DoKeyCommand ( event );
  253.     
  254. }    // <- DoKeyCommand
  255.  
  256. //--------------------------------------------------------------------------------------
  257. #pragma segment MASelCommand
  258.  
  259. pascal void TBehavior::DoMenuCommand ( CmdNumber aCmdNumber )
  260.  
  261. {
  262.  
  263.     if ( fNextBehavior )
  264.         fNextBehavior->DoMenuCommand ( aCmdNumber );
  265.     else if ( fOwner )
  266.         fOwner->DoMenuCommand ( aCmdNumber );
  267.  
  268. }    // <- DoMenuCommand
  269.  
  270. //--------------------------------------------------------------------------------------
  271. #pragma    segment    MAEvtHandlerRes
  272.  
  273. pascal void TBehavior::DoSetupMenus ( void )
  274. {
  275.  
  276.     if ( fNextBehavior )
  277.         fNextBehavior->DoSetupMenus ();
  278.     else if ( fOwner )
  279.         fOwner->DoSetupMenus ();
  280.     
  281. }    // <- DoSetupMenus
  282.  
  283. //--------------------------------------------------------------------------------------
  284. // CBehaviorIterator
  285. //----------------------------------------------------------------------------------------
  286. #pragma segment MABehaviorRes
  287.  
  288. Boolean CBehaviorIterator::More()
  289. {
  290.     return (fCurrentBehavior != NULL);
  291. }
  292.  
  293. //--------------------------------------------------------------------------------------------------
  294. #pragma segment MABehaviorRes
  295.  
  296. void CBehaviorIterator::Reset()
  297. {
  298.     fCurrentBehavior = fFirstBehavior;
  299. }
  300.  
  301. //--------------------------------------------------------------------------------------------------
  302. #pragma segment MABehaviorRes
  303.  
  304. void CBehaviorIterator::Advance()
  305. {
  306.     fCurrentBehavior = fNextBehavior;
  307.     if (fCurrentBehavior)
  308.         fNextBehavior = fCurrentBehavior->GetNextBehavior();
  309. }
  310.  
  311.